package com.bjzc.AndroidSDK;

import java.lang.reflect.Field;

import com.RS.AndroidSDK.HardwareCtrl;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.Gravity;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;

/**
 * �Ի����װ��
 */
public class DialogTool {

    /**
     * ������ͨ�Ի���
     *
     * @param ctx      ������ ����
     * @param iconId   ͼ�꣬�磺R.drawable.icon ����
     * @param title    ���� ����
     * @param message  ��ʾ���� ����
     * @param btnName  ��ť���� ����
     * @param listener ����������ʵ��android.content.DialogInterface.OnClickListener�ӿ� ����
     * @return
     */
    public static Dialog createNormalDialog(Context ctx,
                                            int iconId,
                                            String title,
                                            String message,
                                            String btnName,
                                            OnClickListener listener) {
        Dialog dialog = null;
        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
        // ���öԻ����ͼ��
        builder.setIcon(iconId);
        // ���öԻ���ı���
        builder.setTitle(title);
        // ���öԻ������ʾ����
        builder.setMessage(message);
        // ��Ӱ�ť��android.content.DialogInterface.OnClickListener.OnClickListener
        builder.setPositiveButton(btnName, listener);
        // ����һ����ͨ�Ի���
        dialog = builder.create();
        dialog.show();
        return dialog;
    }


    /**
     * �����б�Ի���
     *
     * @param ctx      ������ ����
     * @param iconId   ͼ�꣬�磺R.drawable.icon ����
     * @param title    ���� ����
     * @param itemsId  �ַ���������Դid ����
     * @param listener ����������ʵ��android.content.DialogInterface.OnClickListener�ӿ� ����
     * @return
     */
    public static Dialog createListDialog(Context ctx,
                                          int iconId,
                                          String title,
                                          int itemsId,
                                          OnClickListener listener) {
        Dialog dialog = null;
        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
        // ���öԻ����ͼ��
        builder.setIcon(iconId);
        // ���öԻ���ı���
        builder.setTitle(title);
        // ��Ӱ�ť��android.content.DialogInterface.OnClickListener.OnClickListener
        builder.setItems(itemsId, listener);
        // ����һ���б�Ի���
        dialog = builder.create();
        return dialog;
    }

    /**
     * ������ѡ��ť�Ի���
     *
     * @param ctx       ������ ����
     * @param iconId    ͼ�꣬�磺R.drawable.icon ����
     * @param title     ���� ����
     * @param itemsId   �ַ���������Դid ����
     * @param listener  ��ѡ��ť�����������ʵ��android.content.DialogInterface.OnClickListener�ӿ� ����
     * @param btnName   ��ť���� ����
     * @param listener2 ��ť����������ʵ��android.content.DialogInterface.OnClickListener�ӿ� ����
     * @return
     */
    public static Dialog createRadioDialog(Context ctx,
                                           int iconId,
                                           String title,
                                           int itemsId,
                                           OnClickListener listener,
                                           String btnName,
                                           OnClickListener listener2) {
        Dialog dialog = null;
        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
        // ���öԻ����ͼ��
        builder.setIcon(iconId);
        // ���öԻ���ı���
        builder.setTitle(title);
        // 0: Ĭ�ϵ�һ����ѡ��ť��ѡ��
        builder.setSingleChoiceItems(itemsId, 0, listener);
        // ���һ����ť
        builder.setPositiveButton(btnName, listener2);
        // ����һ����ѡ��ť�Ի���
        dialog = builder.create();
        return dialog;
    }


    /**
     * ������ѡ�Ի���
     *
     * @param ctx       ������ ����
     * @param iconId    ͼ�꣬�磺R.drawable.icon ����
     * @param title     ���� ����
     * @param itemsId   �ַ���������Դid ����
     * @param flags     ��ʼ��ѡ��� ����
     * @param listener  ��ѡ��ť�����������ʵ��android.content.DialogInterface.OnMultiChoiceClickListener�ӿ� ����
     * @param btnName   ��ť���� ����
     * @param listener2 ��ť����������ʵ��android.content.DialogInterface.OnClickListener�ӿ� ����
     * @return
     */
    public static Dialog createCheckBoxDialog(Context ctx,
                                              int iconId,
                                              String title,
                                              int itemsId,
                                              boolean[] flags,
                                              android.content.DialogInterface.OnMultiChoiceClickListener listener,
                                              String btnName,
                                              OnClickListener listener2) {
        Dialog dialog = null;
        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
        // ���öԻ����ͼ��
        builder.setIcon(iconId);
        // ���öԻ���ı���
        builder.setTitle(title);
        builder.setMultiChoiceItems(itemsId, flags, listener);
        // ���һ����ť
        builder.setPositiveButton(btnName, listener2);
        // ����һ����ѡ�Ի���
        dialog = builder.create();
        return dialog;
    }

    public static Dialog PassCtrlItem(final Context ctx, final int tag) {
        final EditText et = new EditText(ctx);
        et.setInputType(EditorInfo.TYPE_CLASS_PHONE);
        Dialog dialog = new AlertDialog.Builder(ctx).setTitle("����")
                .setIcon(android.R.drawable.ic_dialog_info)
                .setView(et)
                .setPositiveButton("ȷ��", new android.content.DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        String input = et.getText().toString();
                        if (input.equals("32.768")) {
                            if (tag == 1) DismissDialog(ctx);
                        } else {
                            Toast.makeText(ctx, "�������", Toast.LENGTH_SHORT).show();
                        }
                        InputMethodManager m = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
                        m.hideSoftInputFromWindow(et.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                        //if (m.isActive()) m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
                    }
                })
                .setNegativeButton("ȡ��", null)
                .show();
        return dialog;
    }

    public static Dialog DismissDialog(final Context ctx) {
        final EditText et = new EditText(ctx);
        et.setInputType(EditorInfo.TYPE_CLASS_PHONE);
        et.setText(HardwareCtrl.IRTgetTC());
        Dialog dialog = new AlertDialog.Builder(ctx).setTitle("����У��ֵ")
                .setIcon(android.R.drawable.ic_dialog_info)
                .setView(et)
                .setPositiveButton("ȷ��", new android.content.DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        String input = et.getText().toString();
                        HardwareCtrl.IRTsetTC(input);
                        InputMethodManager m = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
                        m.hideSoftInputFromWindow(et.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                        //if (m.isActive()) m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
                    }
                })
                .setNegativeButton("ȡ��", new android.content.DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dismissDialog(dialog);
                        InputMethodManager m = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
                        m.hideSoftInputFromWindow(et.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                    }
                })
                .show();
        dialog.setCanceledOnTouchOutside(false);//���õ��Dialog�ⲿ��������ر�Dialog
        dialog.getWindow().setGravity(Gravity.BOTTOM);
        preventDismissDialog(dialog);
        return dialog;
    }

    /**
     * ͨ������ ��ֹ�Ի����Զ��ر�
     */
    private static void preventDismissDialog(DialogInterface dialog) {
        try {
            Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
            field.setAccessible(true);
            //����mShowingֵ����ƭandroidϵͳ   
            field.set(dialog, false);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * ͨ������ �رնԻ���
     */
    private static void dismissDialog(DialogInterface dialog) {
        try {
            Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
            field.setAccessible(true);
            field.set(dialog, true);
        } catch (Exception e) {
        }
        dialog.dismiss();
    }


}
